package com.thiswhyme.storage.core;

import java.io.InputStream;
import java.util.List;
import java.util.function.Consumer;

/**
 * @description: 对象存储服务接口
 * @author: thiswhyme
 * @date: 2021/6/29
 */
public interface FileStorage {

    /**
     * 平台编码（PlatformType + 配置Key）
     * @return
     */
    String platformCode();

    /**
     * 文件上传
     * 简单文件上传, 最大支持 5 GB, 适用于小文件上传, 建议 20M以下的文件使用该接口
     * @param inputStream 文件输入流
     * @param keyName 文件名
     * @return 文件md5 //TODO
     */
    String upload(InputStream inputStream, String keyName);

    /**
     * 文件下载，输出到指定OutputStream
     * @param keyName 文件唯一key
     * @param consumer 文件流消费者
     */
    void download(String keyName, Consumer<InputStream> consumer);

    /**
     * 获取文件下载url
     * @param keyName 文件唯一key
     * @param expire 该url有效时间，公有bucket可不传该参数，私有bucket必传该参数（秒）
     * @return
     */
    String fetchDownloadUrl(String keyName, Long expire);

    /**
     * 批量删除文件
     * @param keyNames 待删除的key列表
     */
    void batchDelete(List<String> keyNames);
}